iT邦幫忙

2021 iThome 鐵人賽

DAY 3
0

DAY3 MongoDB 連線與 IDE

MongoDB 的連線方式主要有三種,分別是:

  • legacy mongo shell
  • mongo shell
  • IDE

學習以及開發階段,我會比較推薦使用 legacy mongo shell 搭配 IDE 的方式,不過這只是建議並非絕對。主要是 mongo shell 固然強大,但需要額外下載才能使用,一旦遇上沒有 mongo shell 的環境,在反應上可能會略差一點,尤其是線上產品的支援環境不見得會有,有的話那就萬幸了。

legacy mongo shell

這邊說的 legacy mongo shell 執行檔就是 5.0 之前的版本,也就是安裝好 MongoDB 內建的版本。會推薦的原因是少了 intellisense (是缺點也是優點),因此使用上會對指令記憶度最高,且不受環境影響,有安裝 MongoDB 的,肯定也會有這套。

如果使用 docker,那還真的是本機不見得會有呢(馬上打臉上面),解決方案就是連進 container 使用,docker exec -it mongo bash,還是有 mongo 可以使用的啦!

連線方法

mongo --host localhost --port 27666

➜  vscode mongo --host localhost --port 27666
MongoDB shell version v4.2.7
connecting to: mongodb://localhost:27666/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("1ef3b716-b894-4a60-84fe-de2f9e7984e2") }
MongoDB server version: 5.0.2
WARNING: shell and server versions do not match
...(省略)
>

可以從上面看到雖然我的 MongoDB 是 5.0.2 版本,但還是在使用 MongoDB shell v4.2.7,系統會提出警示版本不搭配,至於會出現什麼錯誤,我目前是還沒碰過。

mongo shell

MongoDB 5.0 之後 Mongo shell 正式被搬出來,需要另外進行安裝。那麼 mongosh 好在哪呢?

  • 針對 Intelligence 功能更強化
  • 對於很多舊式的語法都會給予提醒或者直接拒絕
  • 如果連線對象是 replica set 的次節點,也不用特別再指定 rs.secondaryOk()
  • 型別修改,從 NumberInt 改為 Int32
  • 可回顧每個 session 的 log。
  • 可回顧 mongosh 的指令歷史
  • 回傳的文字有更多色彩,方便查看
  • 格式呈現更方便查看
  • 更強大的語法錯誤提示

mongosh session log

  • 先輸入 mongosh 確認本次的 log id
$ mongosh
Current Mongosh Log ID: c2961dbd6b73b052671d9df0
Connecting to: mongodb://127.0.0.1:27017
Using MongoDB: 4.2.8
Using Mongosh: 1.0.5
  • 再到 ~/.mongodb/mongosh/[logId]_log 查看
cat ~/.mongodb/mongosh/<LogID>_log

mongosh command history

查看歷史輸入指令,一樣也存在 mongosh 資料夾底下,完整路徑為:

~/.mongodb/mongosh/.mongosh_repl_history

安裝 mongosh

MacOS 安裝方法很簡單

  1. 安裝 Homebrew
  2. 執行 brew install mongosh
  3. 允許 mongosh 執行權限(macOS安全)

大功告成囉~

連線方法

其實一模一樣,只是改用 mongosh 執行檔

mongosh --host localhost --port 27666

➜  vscode mongosh --host localhost --port 27666
Current Mongosh Log ID:	612cc2e97977cef8180746b9
Connecting to:		mongodb://localhost:27666/?directConnection=true&serverSelectionTimeoutMS=2000
Using MongoDB:		5.0.2
Using Mongosh:		1.0.5

For mongosh info see: https://docs.mongodb.com/mongodb-shell/

------
   The server generated these startup warnings when booting:
   2021-08-30T11:37:05.176+00:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
------

仔細看的話會多了這次的 Log ID,可以用此 ID 去查到這次

離線安裝

  1. 官網下載 mongosh 壓縮檔
  2. 解壓縮 unzip xxx.zip
  3. 提升 mongosh 執行檔的權限
    chmod +x bin/mongosh
    chmod +x bin/mongocryptd-mongosh
  4. 設定 mongosh 執行檔的環境路徑
sudo cp bin/mongosh /usr/local/bin/
sudo cp bin/mongocryptd-mongosh /usr/local/bin/
sudo ln -s $(pwd)/bin/* /usr/local/bin/
  1. 允許 mongosh 執行權限(macOS安全)

IDE

其實系統在開發時,我主要還是以 IDE 為主且還是兩套,因為各有優缺,所以才會同時使用。

Robo 3T

這套是 robomongo 的前身,後來被整併到 3T 軟體底下,是完全免費且開源的軟體。功能較為陽春但很輕巧,開啟連線速度極快,是我大部分開發時使用的軟體。

Robo 3T 官方下載位置,同時可以看到另外一套叫做Studio 3T,是另一款須付費的連線IDE,更多圖形化的工具讓你減少指令的操作以及固定排成事務。我本身是沒有使用過,因為目前的功能都足以應付開發上使用了。

連線方法

  • Step1 點擊 Create 設定連線資訊
    https://ithelp.ithome.com.tw/upload/images/20210902/20140504ZZEi1i8mZW.png

  • Step2 輸入連線資訊後按下 save
    https://ithelp.ithome.com.tw/upload/images/20210902/20140504aHNdgh6d7S.png

連線後就能夠看到整個介面,可以多行編輯你的語法,資料區也可以用 json、table 方式呈現,算是五臟俱全的 IDE
https://ithelp.ithome.com.tw/upload/images/20210902/20140504nhHxPpXdYf.png

MongoDB Compass Community

由 MongoDB 開發人員開發的,如標題,同樣有分為社群版和企業版。在自己學習 MongoDB 的情況下,使用社群版即可。它的特點是:

  • 圖形化介面遠勝於 Robo 3T
  • 畫面上有更多的資訊,像是 Collection 大小,文件的大小
  • 更強大的匯入匯出資料功能
  • aggregation pipeline builder
  • 圖形化的 explain

其實都遠勝於 Robo 3T,但唯獨它的開啟速度真的略慢,而我也不常使用這些功能(或是直接使用指令),因此比較常直接使用 Robo 3T。

MongoDB Compass 官方下載位置

連線方法

照著步驟,一樣的連線資訊,只是改成使用 mongodb 的連線協定。
mongodb://localhost:27666
https://ithelp.ithome.com.tw/upload/images/20210902/20140504ubNWLPAhrZ.png

可以看到功能更豐富了,包含上述的那些,請各位自行去摸索看看了
https://ithelp.ithome.com.tw/upload/images/20210902/20140504gB5be45IL5.png


本系列文章會同步發表於我個人的部落格 Pie Note


上一篇
DAY2 安裝與使用 MongoDB
下一篇
DAY4 MongoDB 資料庫與 Collection
系列文
MongoDB披荊斬棘之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言